Systems with shared resources often require resource allocation and control. Current resource management schemes typically allocate sufficient resources for each operation and maintain locks on the allocated resources for the duration of the operation.
Consider a simple example in which a data backup system involves one operation for labeling a number of storage elements (such as optical disks) and another operation for copying a second set of storage elements. The operations are invoked at approximately the same time. Each operation requires exclusive access to devices for manipulating the storage elements (such as an optical disk drive) while the operation executes. Given that there are a limited number of devices available to these operations in the system, a resource allocation scheme that grants an operation exclusive access to a fixed number of devices may result in resource starvation or reduced performance. For example, if all the devices are allocated to the first operation initially, the execution of the second operation will be starved or blocked until the first operation completes and frees the devices. If half of the devices are allocated to each of the operations, once the faster operation completes and releases its devices, the freed devices will remain idle and lead to inefficient utilization of resources. As systems grow more complex, so does the problem of efficiently managing shared resources.
It would be desirable to have a way to manage shared resources that would avoid resource starvation. It would also be useful if the resource management scheme could be more efficient.